package com.lx.inter.query;

import com.lx.wrapper.AbstractWrapper;
import org.hibernate.query.Query;

/**
 * 用户使用Lambda操作时的后置流程通用执行处理方法
 *
 * @author lx
 * @create 2023/1/11 14:34
 **/
@FunctionalInterface
public interface QueryHandlerFunction<ChildWrapper extends AbstractWrapper> {

    /**
     * 构建Hibernate Query对象成功后,需要用户自定义后续逻辑的统一处理方法
     *
     * @param isHQL
     * @param query
     * @param wrapper
     * @return
     */
    Object handler(boolean isHQL, Query query, ChildWrapper wrapper);


    /**
     * 创建更新语句的默认执行器,用于Lambda对应的[更新]对象
     *
     * @return
     */
    static QueryHandlerFunction createUpdateHandler() {
        return (isHql, query, uw) -> query.executeUpdate();
    }

    /**
     * 创建删除语句的默认执行器,用于Lambda对应的[删除]对象
     *
     * @return
     */
    static QueryHandlerFunction createDeleteHandler() {
        return (isHql, query, uw) -> query.executeUpdate();
    }

}
